/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Bdd;

import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author p0925231
 */
public class DateRepository extends Repository {
    
    //////////////////////
    // Attributs privés //
    //////////////////////


    ///////////////////
    // Constructeurs //
    ///////////////////

    // Implémenté dans la classe Repository //

    ////////////////////////
    // Methodes publiques //
    ////////////////////////

    // Chargement de toutes les données
    public ArrayList loadAll() {
        System.out.println("Tentative de chargement de toute les Dates");
        ArrayList<Date> list = new ArrayList<Date>();
        openConnection();
        try {
            ResultSet ensresul = stmt.executeQuery("SELECT date FROM Date");
            while (ensresul.next()) {
                list.add(ensresul.getDate(1));
            }
            ensresul.close();
            closeConnection();
        } catch (SQLException e) {
            closeConnection();
            System.err.println("Erreur recupération donnée" + e);
        }
        System.out.println("Fin chargement Dates");
        return list;
    }

    
    public Date loadById(int id) {
        System.out.println("Tentative de recupération de la date avec l'id " + id);
        ResultSet result = null;
        Date objResult;
        try {
            openConnection();
            result = stmt.executeQuery("select date from Date where id='" + id + "'");
            objResult = result.getDate(1);
            stmt.close();
            closeConnection();

        } catch (java.sql.SQLException e) {
            closeConnection();
            System.err.println("Probleme execution requete " + e);
            return null;
        }
        System.out.println("Recupération date ok (" + objResult + ")");
        return objResult;
    }
    public int isObjectExist(Object obj) {
        if(obj.getClass() != Date.class) {
            System.out.println("ERREUR ! L'objet envoyé à isObjectExist n'est pas une Date");
            return -1;
        }
        Date objDate = (Date)obj;
        String dateSql = formatSql.format(objDate);
        System.out.println("Recherche existance de Date avec pour valeur=" + dateSql);

        ResultSet result = null;
        int nbObject = 0, idObject = -1;
        try {
            openConnection();
            result = stmt.executeQuery("select id from Date where date='" + dateSql + "'");
            result.last();
            nbObject = result.getRow();
            result.first();

            if (nbObject > 0) {
                idObject = result.getInt(1);
                if (nbObject > 1) {
                    System.out.println("WARNING ! Plusieurs date existe avec la même valeur");
                }
                else {
                    System.out.println("Date unique trouvée");
                }
                result.close();
                closeConnection();
                return idObject;
            }
            else {
                result.close();
                closeConnection();
                return -1;
            }
        } catch (java.sql.SQLException e) {
            closeConnection();
            System.err.println("Probleme execution requete " + e);
            return -1;
        }       
    }
    public boolean isIdExist(int id) {
        ResultSet result = null;
        ArrayList<Integer> fina = new ArrayList<Integer>();
        System.out.println("Recherche existance de Date avec id=" + id);
        try {
            openConnection();
            result = stmt.executeQuery("select count(id) from Date where id='" + id + "'");
            System.out.println("Verification existance Date id=" + id);
            int count;
            while (result.next()) {
                count = result.getInt(1);
                fina.add(count);
            }
            result.close();
            closeConnection();
        } catch (java.sql.SQLException e) {
            closeConnection();
            System.err.println("Probleme execution requete " + e);
            return false;
        }
        // Si il existe un nombre de resultat different de 1 //
        if (fina.size() != 1) {
            // Erreur SQL plusieurs date avec le même id //
            System.out.println("ERROR ! Plusieurs date existe avec cet id");
            return true;
        }
        if (fina.get(0) != 0) {
            System.out.println("Date unique trouvée");
            return true;
        }
        return false;
    }

    public boolean insertObject(Object obj) {
        if(obj.getClass() != Date.class) {
            System.out.println("ERREUR ! L'objet envoyé à isObjectExist n'est pas une Date");
            return false;
        }

        System.out.println("Tentative insertion de la date : "+obj);
        // Recherche de l'existance d'un objet date
        if(isObjectExist(obj)!=-1) {
            System.out.println("L'objet date \""+obj+"\" existe déjà");
            return true;
        }
        // L'objet n'est pas déjà présent, insertion d'un nouveau
        try {
            System.out.println("L'objet date \""+obj+"\" n'existe pas");
            openConnection();
            String query = "insert into Date (date) values('"+obj+"')";
            stmt.executeUpdate(query);
            System.out.println("Insertion date OK");
            closeConnection();
            return true;

        } catch (java.sql.SQLException e) {
            closeConnection();
            System.err.println("Probleme execution requete "+e);
            return false;
        }
    }
}
